30 MSG$(1) =" BAR CHART -- MAIN MENU": MSG$(3) =" GRAPH OPTIONS MENU": MSG$(2)="SELECT TYPE OF CHART" : MSG$(9) ="* * B A R C H A R T * *"
33 XMSG$(1) = "Current Data Values"
40 MSG$(4) =" M O N T H L Y G R A P H": MSG$(5) =" Q U A R T E R L Y G R A P H": MSG$(6)=" Y E A R L Y G R A P H ": MSG$(7) = "D O - I T - Y O U R S E L F G R A P H"
55 SEL$ = "Select an Option: " :EMSG$(1) = "NOTE: Year must be between 1000 and 9999"
60 KEY OFF:FOR I=1 TO 10: KEY I,"": NEXT: ON KEY (9) GOSUB 740: KEY (9) ON
70 ON KEY (1) GOSUB 8000: REDO%=1: KEY (1) ON
80 ON KEY (3) GOSUB 9000
90 DEF SEG: POKE 106,0
100 ON ERROR GOTO 7000
190 REM ---------------------------------------------------------------------
195 REM INTRO SCREEN 1
200 CLS: LOCATE 12,25: PRINT MSG$(9)
205 LOCATE 14,33: PRINT "VERSION 1.0
210 LOCATE 24,50: PRINT "Press space bar to continue."
220 K$=INKEY$: IF K$<>" " THEN 220
229 REM ---------------------------------------------------------------------
230 REM INTRO SCREEN 2
233 CLS: LOCATE 2,25: PRINT MSG$(9)
235 LOCATE 5,15:PRINT "1. On screens where an asterisk appears in":LOCATE 7,18:PRINT "the top right hand corner, the current image":LOCATE 9,18:PRINT "will remain until the SPACE BAR is depressed."
240 LOCATE 12,15: PRINT "2. On all other screens, you will be prompted ":LOCATE 14,18:PRINT "for INPUT.
242 LOCATE 17,15:PRINT "3. To use a FUNCTION KEY when input is expected,":LOCATE 19,18:PRINT "press the desired key followed by the Enter Key."
250 LOCATE 1,80:PRINT "*"
260 K$=INKEY$: IF K$<>" " THEN 260
269 REM ---------------------------------------------------------------------
270 REM INTRO SCREEN 3
273 CLS: LOCATE 1,25: PRINT MSG$(9)
276 LOCATE 4,12: PRINT "4. The following FUNCTION KEYS may be used:": LOCATE 7,15: PRINT "F1 -- To return to the top of the nearest Screen or": LOCATE 9 ,21: PRINT "to skip these introductory screens and proceed"
278 LOCATE 11,21: PRINT "directly to the Main Menu": LOCATE 14,15: PRINT "F3 -- To run the set of Sample Charts. This option ": LOCATE 16,21: PRINT "is available only at the beginning of the":LOCATE 18,21
280 PRINT"BAR CHART Program. (See next screen)":LOCATE 21,15: PRINT"F9 -- To EXIT The BAR CHART Program at any time.
290 LOCATE 1,80:PRINT "*"
300 K$=INKEY$: IF K$<>" " THEN 300
303 REM ---------------------------------------------------------------------
305 REM INTRO SCREEN 4 -- SAMPLES INSTRUCTIONS
308 KEY (3) ON
310 CLS: LOCATE 2,28: PRINT "* * B A R C H A R T * *
330 LOCATE 6,25:PRINT "A set of Sample Charts are included ":LOCATE 8,25:PRINT "with the BAR CHART Program."
340 LOCATE 11,25:PRINT "To run the Sample Demonstration ":LOCATE 13,25:PRINT "Press the F3 Key now."
350 LOCATE 16,25:PRINT "Otherwise Push the Space BAR. "
390 K$=INKEY$: IF K$ <> " " THEN 390: ELSE KEY (3) OFF
400 REM ---------------------------------------------------------------------
970 FOR I=0 TO 11-MTH%: SV$(I)=LABEL$(I+MTH%):NEXT
980 FOR I=12-MTH% TO 11:SV$(I)=LABEL$(I-12+MTH%):NEXT
990 FOR I=0 TO 11:LABEL$(I)=SV$(I):NEXT: IF OP$="1" THEN RETURN
1000 REDO%=4: CLS : LOCATE 1,28:PRINT MSG$(4)
1005 LOCATE 4,1:IF OPT4 <> 2 THEN PRINT "Enter a Value for each Month":ELSE PRINT XMSG$(1)
1010 FOR I=0 TO 11: LOCATE I+6,1: PRINT LABEL$(I);",";:IF I<12-MTH% THEN PRINT YR-1:ELSE PRINT YR
1020 NEXT: IF OPT3=3 THEN 1300: REM OPT3 -- DISPLAY DATA
1030 RETURN 640
1100 REM --------------------------------------------------------------
1102 REM QUARTERLY
1103 REDO%=5: CLS : LOCATE 1,23:PRINT MSG$(5)
1105 LOCATE 4,1:PRINT "The Quarterly Graph will display Quarterly Data for 1 to 3 Years":LOCATE 6,5:PRINT "If more than 1 Year is selected, the data can be plotted ":LOCATE 7,5:PRINT "Chronologically or Grouped by Quarters."
1110 LOCATE 10,1:PRINT "Number of Years for which data will be entered."
1120 LOCATE 10,61:INPUT Z$ :IF VAL(Z$)<1 OR VAL(Z$)>3 THEN BEEP: GOTO 1120: ELSE YRS=VAL(Z$)\1
1130 IF YRS=1 THEN Z$="":QOPT$="c":GOTO 1160:ELSE Z$="Last"
1140 LOCATE 13,1:PRINT "Select type of display": LOCATE 14,5 :PRINT " Chronological (C) or Grouped by Quarters (G)"
1150 LOCATE 13,61:INPUT QOPT$:IF QOPT$ ="C" THEN QOPT$ ="c"
1153 IF QOPT$ ="G" THEN QOPT$ = "g"
1155 IF QOPT$<>"c" AND QOPT$<>"g" THEN BEEP: GOTO 1150
1160 IF YRS=1 THEN X=13: ELSE X=17
1170 LOCATE X,1:PRINT Z$;" Year for which data will be entered.":
1180 LOCATE X,61: INPUT Z$: IF VAL(Z$)<1000 OR VAL(Z$)>9999 THEN BEEP: LOCATE X+4,1:PRINT EMSG$(1):GOTO 1180:ELSE YR=VAL(Z$)\1
1190 REDO%=6: CLS : LOCATE 1,23:PRINT MSG$(5)
1195 LOCATE 4,1:IF OPT4 <> 2 THEN PRINT "Enter a Value for each Quarter" :ELSE PRINT XMSG$(1)
1200 K=-1:FOR I=1 TO YRS:FOR J=1 TO 4: K=K+1:LOCATE 6+K,1:PRINT USING "####"; YR+I-YRS;:PRINT " QTR";J:NEXT:NEXT:IF OPT3=3 THEN GOTO 1300
1210 N=YRS*4-1:IF QOPT$="c" THEN 1230
1220 IF YRS=2 THEN XL=63:S=10:W=6:GOTO 1250:ELSE XL=63:S=12:W=4:GOTO 1250
1230 IF YRS=1 THEN XL=61:S=4:W=12:GOTO 1250
1240 IF YRS=2 THEN XL=64:S=2:W=6:ELSE XL=60:S=1:W=4
1250 IF OP$="2" THEN RETURN 640: ELSE RETURN
1300 REM --------------------------------------------------------------
1303 REM INPUT GRAPH DATA
1306 I=-1:J=0
1310 I=I+1: K=I: L=17
1320 IF N>11 THEN K=I MOD (N+2)\2: IF I>=(N+1)/2 THEN L=57
1330 LOCATE 6+K,L,1: IF OPT4<>2 THEN INPUT Z$: M#(I)=VAL(Z$): ELSE PRINT M#(I): GOTO 1380
1340 IF ABS(M#(I))<1E+15 THEN 1380
1350 J=1
1360 BEEP: LOCATE 22,1:PRINT "Enter numbers no greater in absolute value "
1370 LOCATE 23,1:PRINT "than 999,999,999,999,999. Do not use commas.":IF J=2 THEN 1450:ELSE 1330
1380 IF I<N THEN 1310
1390 IF OPT4=2 THEN RETURN
1400 IF J=1 THEN LOCATE 22,1: FOR X=1 TO 2: FOR Y=1 TO 10: PRINT " ";:NEXT:NEXT
1410 LOCATE K+9,1: GOSUB 5900: REM RELATIVE TO AVERAGE (Y OR N)
1420 IF R$="y" THEN 1460
1430 IF R$="n" THEN LOCATE K+9,1:FOR X=1 TO 5: PRINT " ";:NEXT:ELSE BEEP: GOTO 1410
1440 LOCATE K+9,1:PRINT "Enter the value of the horizontal axis."
1450 LOCATE K+9,50: INPUT Z$: REF#=VAL(Z$): IF REF#>1E+15 THEN J=2: GOTO 1360
1460 RETURN
1500 REM --------------------------------------------------------------
1502 REM YEARLY
1503 REDO%=7: CLS : LOCATE 1,26:PRINT MSG$(6)
1505 LOCATE 6,1:PRINT "Enter the Number of Years to be Graphed": LOCATE 7,5: PRINT "(Minimum is 2, Maximum is 20)"
1510 LOCATE 6,61: INPUT Z$: IF VAL(Z$)<2 OR VAL(Z$)>20 THEN BEEP: GOTO 1510:ELSE N=VAL(Z$)\1-1
1515 LOCATE 9,1:PRINT "Last Year for which Data will be Entered."
1520 LOCATE 9,61: INPUT Z$: IF VAL(Z$)>999 AND VAL(Z$)<10000 THEN YR=VAL(Z$):GOTO 1540
1530 LOCATE 13,1: PRINT EMSG$(1): BEEP:GOTO 1520
1540 REDO%=8: CLS : LOCATE 1,26:PRINT MSG$(6)
1545 LOCATE 4,1:IF OPT4 <> 2 THEN PRINT "Enter a Value for each Year": ELSE PRINT XMSG$(1)
1550 I=-1
1560 I=I+1: K=I: L=5
1570 IF N>11 THEN K=I MOD (N+2)\2: IF I>=(N+1)/2 THEN L=40
1580 LOCATE 6+K,L:PRINT USING "####"; YR+I-N:IF I<N THEN 1560
1590 IF OPT3=3 THEN 1300
1600 IF N>=16 THEN S=1:GOTO 1670
1610 IF 9<=N AND N<=15 THEN S=2
1620 IF N=12 OR N=11 THEN S=1: GOTO 1670
1630 IF N=7 THEN S=2:GOTO 1670
1640 IF 4<=N AND N<=6 THEN S=3:GOTO 1670
1650 IF N=8 THEN S=3:GOTO 1670
1660 IF 1<=N AND N<=3 THEN S=5:GOTO 1670
1670 W=S-1
1680 W=W+1: XL=1+(N+1)*W+S*N: IF XL+N+1<67 THEN 1680
1690 IF OP$="2" THEN RETURN 640: ELSE RETURN
1700 REM --------------------------------------------------------------
1705 REDO%=9: CLS: LOCATE 1,28:PRINT"G R A P H T I T L E S
1710 LOCATE 6,1:PRINT "Enter the Title of the Graph"
1715 LOCATE 22,5: PRINT"NOTE: Titles may not contain commas (,)
1720 LOCATE 7,5:PRINT "(maximum two lines of 80 characters)"
1740 LOCATE 9,1,1:INPUT TITLE$(1)
1750 LOCATE 10,1,1:INPUT TITLE$(2)
1755 LOCATE 13,1:PRINT "Enter the Title of the Vertical Axis"
1760 LOCATE 15,1,1:INPUT TITLE$(3)
1770 IF OPT3=7 THEN 3800
1780 RETURN
1800 REM --------------------------------------------------------------
1854 ASUM# =0: FOR I = 0 TO N: ASUM# = M#(I) + ASUM#: NEXT I: AVG# =ASUM#/(N+1)
1860 IF YOPT<>3 THEN 1900 :ELSE IF MIN#<0 OR AVG#=0 THEN PRCENT$="n": GOTO 4100:ELSE PRCENT$="y":SCALE$="":FOR K=0 TO N: M(K)=100*M#(K)/(AVG#*(N+1)):NEXT: MAX=100*MAX#/(AVG#*(N+1)): MIN=100*MIN#/(AVG#*(N+1))
1870 IF R$="n" THEN IF REF#>100 THEN REF=100: ELSE IF REF#<0 THEN REF=0: ELSE REF=REF#
1880 IF R$="y" THEN REF=100/(N+1)
1890 GOTO 2070
1900 IF R$="y" THEN REF#=AVG#
1910 ABMAX#=ABS(MAX#): IF ABS(MIN#)>ABMAX# THEN ABMAX#=ABS(MIN#)
1920 IF ABS(REF#)>ABMAX# THEN ABMAX#=ABS(REF#)
1930 IF ABMAX#>=0.000999999 AND ABMAX#<1000 THEN 1980
1940 IF ABMAX#>=1E+06 AND ABMAX# <1E+09 THEN 1990
1950 IF ABMAX#>=1000 AND ABMAX#<1E+06 THEN 2010
1960 IF ABMAX#>=1E+09 AND ABMAX#<1E+12 THEN 2030
1970 IF ABMAX#>=1E+12 THEN 2050
1980 AVG=AVG#:REF=REF#:MIN=MIN#:MAX=MAX#:FOR I=0 TO N: M(I)=M#(I):NEXT:SCALE$="":GOTO 2070
1990 AVG=AVG#/1E+06:REF=REF#/1E+06:MIN=MIN#/1E+06:MAX=MAX#/1E+06:FOR I=0 TO N:M(I)=M#(I)/1E+06: NEXT
2000 SCALE$="(in millions)": GOTO 2070
2010 AVG=AVG#/1000:REF=REF#/1000:MIN=MIN#/1000:MAX=MAX#/1000:FOR I=0 TO N:M(I)=M#(I)/1000: NEXT
2020 SCALE$="(in thousands)": GOTO 2070
2030 AVG=AVG#/1E+09:REF=REF#/1E+09:MIN=MIN#/1E+09:MAX=MAX#/1E+09: FOR I=0 TO N: M(I)=M#(I)/1E+09: NEXT
2040 SCALE$="(in billions)": GOTO 2070
2050 AVG=AVG#/1E+12:REF=REF#/1E+12:MIN=MIN#/1E+12:MAX=MAX#/1E+12: FOR I=0 TO N: M(I)=M#(I)/1E+12: NEXT
2060 SCALE$="(in trillions)": GOTO 2070
2070 IF YOPT<>2 THEN REF=CINT(REF)
2080 I=0: IF REF=<MIN THEN I=1: JUMP!=(MAX-REF)/37: GOTO 2150
2090 I=0: IF REF=<MIN THEN I=1: JUMP!=(MAX-REF)/37: GOTO 2150
2100 IF REF>=MAX THEN I=37: JUMP!=(REF-MIN)/37: GOTO 2150
2120 IF A<=REF AND REF<=B THEN I=I-1: GOTO 2130: ELSE 2110
2130 A=(MAX-REF)/(38-I): B=(REF-MIN)/I
2140 IF A>=B THEN JUMP!=A:ELSE JUMP!=B
2150 IF YOPT=2 THEN 2180:ELSE IF JUMP!<0.25 THEN JUMP!=0.25
2155 SV=JUMP!: J!=INT(JUMP!)-0.25
2160 J!=J!+0.25: IF SV>J!+0.05 THEN JUMP!=J!+0.25: IF J!<INT(SV)+1 THEN 2160
2180 IF YOPT=2 THEN IF JUMP!=0 THEN JUMP!=0.000999999
2190 T(I)=REF: FOR J=0 TO 38: T(J)=T(I)+(J-I)*JUMP!:NEXT
2200 XAXIS=23.5-I/2: XTIC=I
2210 I=-1
2220 I=I+1: A%(I)=0
2230 J=0:IF M(I)>=0.5*(T(32)+T(31)) THEN J=31: GOTO 2270
2240 IF M(I)>=0.5*(T(24)+T(23)) THEN J=23: GOTO 2270
2250 IF M(I)>=0.5*(T(16)+T(15)) THEN J=15: GOTO 2270
2260 IF M(I)>=0.5*(T(8)+T(7)) THEN J=7
2270 J=J+1: IF M(I)>=0.5*(T(J)+T(J-1)) THEN A%(I)=J: ELSE 2290
2280 IF J<38 THEN 2270
2290 IF I<N THEN 2220
2300 RETURN
2400 REM ----------------------------------------------------------
2403 REM DISPLAY THE GRAPH
2405 YAX=(82-XL-1)\2: IF YAX<8 THEN YAXSV=YAX: YAX=8: ELSE YAXSV=8
2410 IF OPT3=2 THEN LPRINT CHR$(27)+CHR$(12)
2420 CLS: IF GRID$<>"y" THEN 2450
2430 DOT$="": FOR I=1 TO XL: DOT$=DOT$+CHR$(249): NEXT:
2440 FOR I=5 TO 23: LOCATE I,YAX+1: PRINT DOT$;: NEXT
2450 I=4: IF 1=XAXIS MOD 2 THEN I=3
2460 I=I+2:J=39-2*(I-4): IF T(J)>=0 THEN 2510
2470 LOCATE I,YAX-7:IF T(J)<=-1000 OR YOPT<>2 THEN PRINT USING "+####.";T(J): LOCATE I,YAX-2: IF YOPT<>3 THEN PRINT ".";:GOTO 2550: ELSE PRINT "%";: GOTO 2550
2480 IF T(J)<=-100 AND T(J)>-1000 THEN PRINT USING "+###.#";T(J):GOTO 2550
2490 IF T(J)>-100 AND T(J)<=-10 THEN PRINT USING "+##.##";T(J):GOTO 2550
2500 PRINT USING "+#.###";T(J):GOTO 2550
2510 LOCATE I,YAX-6:IF T(J)>=1000 OR YOPT<>2 THEN PRINT USING "####.";T(J): LOCATE I,YAX-2: IF YOPT<>3 THEN PRINT ".";:GOTO 2550: ELSE PRINT "%";: GOTO 2550
2520 IF T(J)>=100 AND T(J)<1000 THEN PRINT USING "###.#";T(J):GOTO 2550
2530 IF T(J)<100 AND T(J)>=10 THEN PRINT USING "##.##";T(J):GOTO 2550
2540 PRINT USING "#.###";T(J)
2550 IF I<22 THEN 2460
2560 K=0
2570 K=K+1
2580 I=LEN(TITLE$(K)): J=(82-I)\2: IF YAXSV<8 THEN J=J+YAXSV\2
2590 IF J<1 THEN J=1
2600 LOCATE K,J:PRINT TITLE$(K)
2610 IF K=1 GOTO 2570
2620 I=LEN(TITLE$(3)):J=(2*YAX+1-I)\2:IF J<1 THEN J=1
4030 GOSUB 1860: GOSUB 4050: REM GRAPH SCALE, CLEAR LINE 23
4040 LOCATE 6,21:PRINT " ";: GOTO 3805
4045 REM --------------------------------------------------------------------
4050 LOCATE 23,1:FOR J=1 TO 19:PRINT " ";:NEXT: RETURN: REM CLEAR LINE 23
4055 REM ----------------CHANGE GRID ON/OFF----------------------------------
4060 IF G$="n" THEN IF GRID$<>"y" THEN GRID$="y":ELSE GRID$="n"
4070 G$="y": GOTO 4040
4100 REM --------------------------------------------------------------
4105 REDO%=14: CLS: SV=YOPT: LOCATE 2,23:PRINT "SELECT Y-AXIS OPTION":LOCATE 10,1:PRINT SEL$:LOCATE 5,1:PRINT "This option determines how the Y-Axis Tick Values are calculated.":LOCATE 7,5: PRINT "The current Y-Axis option is ";YOPT
4110 LOCATE 13,23:PRINT "1. INTEGERS (rounding occurs)":LOCATE 15,23:PRINT "2. EXACT (to four digits)":LOCATE 17,23:PRINT "3. PERCENTAGES (rounded to integers)":GOSUB 5800
4120 LOCATE 10,20:INPUT Z$: IF VAL(Z$)<1 OR VAL(Z$)>3 THEN BEEP: GOTO 4120: ELSE YOPT=VAL(Z$)
4130 GOSUB 5800: IF PRCENT$="n" AND YOPT=3 THEN 4120:ELSE IF SV=YOPT THEN 3800: ELSE GOSUB 1810: GOTO 3800
4190 REM ---------------------------------------------------------------------
4195 REM WRITE .BAR FILE
4200 OPEN NEWFILE$ FOR OUTPUT AS #1:KEY (1) STOP: KEY (9) STOP
4800 REM --------------------------------------------------------------
4803 REM PRINT THE GRAPH
4805 FOR I=1 TO 25:FOR J=1 TO 80: X=SCREEN (I,J)
4810 IF I=1 AND J=80 THEN X=160
4820 IF X<192 THEN 4900
4830 IF X=218 THEN X=200
4840 IF X=192 THEN X=170
4850 IF X=196 THEN X=172
4860 IF X=197 THEN X=206
4870 IF X=223 THEN X=175
4880 IF X=219 THEN X=223
4890 IF X=249 THEN X=32
4900 LPRINT CHR$(X);:NEXT:NEXT: IF SAMPLE$="y" THEN RETURN 9010: ELSE RETURN 730:
5000 REM --------------------------------------------------------------
5002 REM DO-IT-YOURSELF
5003 REDO%=15: CLS : LOCATE 1,22:PRINT MSG$(7)
5004 IF OPT4=2 THEN GOTO 5510
5005 LOCATE 5,1:PRINT SEL$:LOCATE 8,22:PRINT "1. Set constant Bar Width and Spacing":LOCATE 10,22:PRINT "2. Enter Widths and Spacing individually"
5010 LOCATE 5,19
5020 INPUT DOOP$: IF DOOP$<>"1" AND DOOP$<>"2" THEN BEEP: GOTO 5010
5030 IF DOOP$="1" THEN LOCATE 13,1:PRINT "Enter the WIDTH (Same for Each Bar)":LOCATE 15,1:PRINT "Enter the SPACE (Between Bars)": ELSE IF OPT4<>2 THEN 5200: ELSE 5130
5040 LOCATE 13,40:IF OPT4<>2 THEN INPUT Z$: IF VAL(Z$)<1 OR VAL(Z$)>71 THEN BEEP: GOTO 5040: ELSE W=VAL(Z$)\1: GOTO 5060
5050 PRINT W: GOTO 5060
5060 LOCATE 15,40:IF OPT4<>2 THEN INPUT Z$:IF VAL(Z$)<0 OR VAL(Z$)\1+W>71 THEN BEEP: GOTO 5060:ELSE S=VAL(Z$)\1: GOTO 5080
5070 PRINT S: GOTO 5130
5080 I=1
5090 I=I+1: IF W*I+S*(I-1)<=71 THEN 5090
5100 IMAX=I-1
5110 LOCATE 21,22: PRINT "The Maximum Number of Bars will be";I-1
5230 IF DOOP$="2" AND OPT4<>2 THEN LOCATE 23,1:PRINT "You have used ";:PRINT USING "###";L;:PRINT " of 71 print positions. There are ";:PRINT USING "###";71-L;:PRINT " remaining.";
5240 IF OPT4=2 THEN RETURN
5250 IF PAGE>1 THEN 5270
5260 I=-1
5270 IF RE16$="y" THEN I=(PAGE-1)*15-1: RE16$="n"
5280 I=I+1: IF DOOP$="1" AND I=IMAX THEN 5410
5290 IF L=71 THEN 5410
5300 IF I=PAGE*15 THEN I=I-1: SV%=L: GOTO 5210
5310 J=7-(PAGE-1)*15: LOCATE I+J,1:PRINT USING "##";I+1;:PRINT "."
5320 LOCATE I+J,5:INPUT LABEL$(I):IF LABEL$(I)="/" THEN 5410
5330 X=LEN(LABEL$(I)):IF X>26 THEN BEEP: GOTO 5320
5340 LOCATE I+J,34:INPUT Z$: M#(I)=VAL(Z$):IF ABS(M#(I))>1E+15 THEN BEEP:GOTO 5340
5350 IF DOOP$="1" THEN Y=W: GOTO 5400
5360 LOCATE I+J,55:INPUT Z$: S(I)=VAL(Z$)\1:IF S(I)>70 OR S(I)<0 THEN BEEP :GOTO 5360: ELSE Y=S(I)
5370 L=L+Y:IF L>71 THEN L=L-Y: BEEP:GOTO 5360: ELSE GOSUB 5600
5380 LOCATE I+J,68:INPUT Z$: W(I+1)=VAL(Z$)\1 :IF W(I+1)>71 OR L+W(I+1)>71 THEN BEEP: GOTO 5380: ELSE IF W(I+1)<1 THEN L=L-Y:GOSUB 5600: GOTO 5320
5390 L=L+W(I+1): GOSUB 5600: Y=W(I+1)
5400 LABEL$(I)=LEFT$(LABEL$(I),Y): GOTO 5280
5410 N=I-1: IF N=-1 THEN 400: ELSE GOSUB 5700
5420 LOCATE 23,1: GOSUB 5900
5430 IF R$="y" THEN 5470
5440 IF R$="n" THEN GOSUB 5700 :ELSE BEEP: GOTO 5420
5450 LOCATE 23,1:PRINT "Enter the Value of the Horizontal Axis.";
5470 IF DOOP$="2" THEN 5480: ELSE FOR I=1 TO N+1: W(I)=W: S(I)=S:NEXT: S(0)=0: W(0)=0
5480 XL=0: FOR I=0 TO N+1: XL=XL+S(I)+W(I):NEXT: XL=XL-S(N+1)
5490 IF OP$="1" OR SAMPLE$="y" THEN RETURN :ELSE RETURN 650
5500 KEY (1) OFF: IF OPT<>4 THEN 5570: ELSE 5000
5510 GOSUB 5200: IF PAGE>1 THEN 5530
5520 I=-1
5530 I=I+1:IF I<>PAGE*15 THEN 5550
5540 LOCATE 1,79: PRINT "*": K$=INKEY$: IF K$<>" " THEN 5540: ELSE IF I-1=N THEN 3800: ELSE : GOSUB 5210
5550 J=7-(PAGE-1)*15:LOCATE I+J,1:PRINT USING "##";I+1;:PRINT ".";:LOCATE I+J,7:PRINT LABEL$(I):LOCATE I+J,36:PRINT M#(I);:IF DOOP$="2" THEN LOCATE I+J,57:PRINT S(I);:LOCATE I+J,70: PRINT W(I+1);
5560 IF I<N THEN 5530: ELSE I=I+1: GOTO 5540
5570 ON OPT GOSUB 1000,1190,1540: LOCATE 1,79,0:PRINT "*";
5580 K$=INKEY$: IF K$<>" " THEN 5580: ELSE 3800
5600 REM --------------------------------------------------------------
5610 LOCATE 23,15:PRINT USING "###";L;:LOCATE 23,52:PRINT USING "###";71-L;:RETURN
5700 REM --------------------------------------------------------------
5705 REM CLEAR LINE 22
5710 LOCATE 22,1: FOR I=1 TO 19: PRINT " ";:NEXT: RETURN
5800 REM --------------------------------------------------------------
5810 IF PRCENT$="n" AND YOPT=3 THEN BEEP: LOCATE 22,1:PRINT "The PERCENTAGE option can be chosen only if all data":PRINT "is non-negative and the total is positive.";
5820 RETURN
5900 REM --------------------------------------------------------------
5903 REM RELATIVE TO AVERAGE (Y OR N)
5905 INPUT "Display the data relative to the average value (Y or N) ";R$: IF R$="Y" THEN R$="y": ELSE IF R$="N" THEN R$="n"
5910 RETURN
7000 REM --------------------------------------------------------------
7003 REM ERROR HANDLING
7005 IF ERR<>71 THEN 7020: ELSE CLS: BEEP:LOCATE 13,25:PRINT "Did you remove the diskette?": LOCATE 1,79: PRINT "*": IF REDO%=10 THEN 7120
7010 K$=INKEY$: IF K$<>" " THEN 7010: ELSE IF SAMPLE$="y" THEN RESUME 310: ELSE IF REDO%=13 THEN RESUME 4300: ELSE RESUME 400
7020 IF ERR<>62 THEN 7040: ELSE CLS: BEEP:LOCATE 10,20:PRINT "ERROR: The file you have requested cannot be used."
7030 LOCATE 1,79:PRINT "*":GOTO 7050
7040 IF SAMPLE$<>"y" THEN 7060: ELSE CLS: LOCATE 13,20:PRINT "End of Bar Chart SAMPLE Demonstration":LOCATE 1,79:PRINT "*":GOTO 7050
7050 K$=INKEY$: IF K$<>" " THEN 7050: ELSE RESUME 400
7060 IF REDO%=1 AND OP$="1" THEN BEEP:GOSUB 5700: LOCATE 18,5: PRINT "ERROR: File ";FILE$;" not in list": RESUME 498
7070 IF ERR=53 AND REDO%=13 THEN BEEP:RESUME 4450
7080 IF OP$="3" AND ERR=64 THEN BEEP:RESUME 4450
7090 IF ERR<>61 THEN 7100: ELSE CLS:BEEP:LOCATE 10,20:PRINT "The disk appears to be full.":LOCATE 12,20:PRINT "The file you have attempted to save might":LOCATE 14,20:PRINT "not have been completely stored.":LOCATE 1,78:PRINT "*" : GOTO 7120
7100 IF REDO%=10 AND OPT3=3 THEN LOCATE 23,48: PRINT "This name is invalid.";:BEEP:RESUME 3850
7110 IF ERR<>27 THEN 7130 ELSE CLS: BEEP:LOCATE 8,20:PRINT "NOTE: Check your printer connection":LOCATE 1,79:PRINT "*"
7120 K$=INKEY$: IF K$<>" " THEN 7120: ELSE RESUME 3800
7130 IF REDO%=12 AND ERR=53 THEN BEEP:LOCATE 13,30:PRINT "No files have been stored.": LOCATE 1,79:PRINT "*": ELSE 7150
7140 K$=INKEY$: IF K$<>" " THEN 7140 ELSE RESUME 400
7150 IF ERR=24 THEN CLS: LOCATE 13,30:PRINT "Check your printer.": BEEP:LOCATE 1,79:PRINT "*":GOTO 7120
8000 IF REDO%>8 THEN 8020: ELSE IF REDO%>4 THEN 8010:ELSE IF REDO%=1 THEN RETURN 400: ELSE IF REDO%=2 THEN RETURN 800: ELSE IF REDO%=3 THEN RETURN 900: ELSE IF REDO%=4 THEN RETURN 1000
8010 IF REDO%=5 THEN RETURN 1100: ELSE IF REDO%=6 THEN RETURN 1190: ELSE IF REDO%=7 THEN RETURN 1500: ELSE IF REDO%=8 THEN RETURN 1540
8020 IF REDO%>12 THEN 8030: ELSE IF REDO%=9 THEN RETURN 1700: ELSE IF REDO%=10 THEN RETURN 3800: ELSE IF REDO%=11 THEN RETURN 3900: ELSE IF REDO%=12 THEN RETURN 4300
8030 IF REDO%=13 THEN RETURN 4400: ELSE IF REDO%=14 THEN RETURN 4100: ELSE IF REDO%=15 THEN RETURN 5000: ELSE IF REDO%=16 THEN RE16$="y": L=SV%: RETURN 5210
9000 REM --------------------------------------------------------------